home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
mfreep
/
mfreep.asm
next >
Wrap
Assembly Source File
|
1993-07-08
|
2KB
|
136 lines
; native memory の残量を、表示する。
; 4/2/8 ver 1.0
; copy free Shinwa
;
.386p
include msdos.def
code segment dword 'CODE' use32
assume cs:code, ds:code, ss:code
allocate_mem macro PAGE
mov ebx, PAGE
mov ah, 48h
int 21h
endm
entry:
xor ax, ax
allocate_mem 0ffffffffh
mov eax, ebx
inc eax ;プロラム自身のページ分
shl eax, 12
mov ecx, eax
lea ecx, [ecx][ecx*4] ;ecx*5
shr ecx, 19 ;ecx :100k byte 単位
push ecx
mov ecx, 10
lea edi, BUFFER
mov edx, edi
call bn4dec
lea edx, MES1
mov ecx, MES1LEN
call putstr
pop eax
mov ebx, eax ;bx に値を保存
mov cl, 10 ;ax を10進数に
div cl
add al, '0'
lea edi, BUFFER2
mov [edi], al
add edi, 2
add ah, '0'
mov [edi], ah
lea edx, MES2
mov ecx, MES2LEN
call putstr
mov ax, bx ;errorlevel <- 100k byte 単位
msdos F$EXIT
;******************************
; bn4dec
; 符号なし4バイト2進数を
; 10進ASCII数字に変換。
; 指定された幅の欄に右寄せ。
; あふれた文字は削除。
;
; in : eax = 2進数下位ワード
; ecx = 欄幅 (通常10)
; edi = 文字列格納番地
; out: edi = 文字列末尾番地
; use: none
;
bn4dec proc near
push eax
push ebx
push ecx
push edx
add edi, ecx ; 末尾番地
push edi
dec edi ; 数字列最下位桁番地
mov ebx,10 ; 除数=10
bn4de1: xor edx,edx
div ebx
add dl,'0' ; ASCII数字に変換して
mov [edi], dl ; バッファに格納
dec edi ; ポインタを上位桁位置へ
test eax, eax ; 桁が残っているか調べる
loopnz short bn4de1
;
std ; ディレクションフラグセット
mov al,C$SPAC ; 先頭は空白で埋める
rep stosb
cld ; ディレクションフラグクリア
pop edi ; 末尾番地
pop edx
pop ecx
pop ebx
pop eax
ret
bn4dec endp
;******************************
; putstr : 文字列を標準出力へ
;
; in : edx = 文字列基底番地
; ecx = 文字列バイト長
; out: eax = 書き出したバイト数
; err: cf = キャリーセット
; ax = エラーコード
;
putstr proc near
push bx
mov bx,STDOUT
msdos F$Write
pop bx
ret
putstr endp
MES1 db "Native Memory: "
BUFFER db 10 dup(?)
db " byte free "
MES1LEN equ $-MES1
MES2 db "(about "
BUFFER2 db "?.?M byte)", C$CR, C$LF
MES2LEN equ $-MES2
code ends
end